#ifndef _GTREE_H_
#define _GTREE_H_

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef void GTree;
typedef void GTreeData;
typedef void (GTree_Printf)(GTreeData*);    // 函数指针

/* 创建树 */
GTree* GTree_Create();

/* 销毁已存在的树 */
void GTree_Destroy(GTree* tree);

/* 将已存在的树清空为空树 */
void GTree_Clear(GTree* tree);

/* 将结点node插入到GGTree中的pos位置处 */
int GTree_Insert(GTree* tree, GTreeData* data, int pos);

/* 将GTree中pos位置的结点删除并返回 */
GTreeData* GTree_Delete(GTree* tree, int pos);

/* 将GTree中pos位置的结点返回 */
GTreeData* GTree_Get(GTree* tree, int pos);

/* 返回GTree的根结点 */
GTreeData* GTree_Root(GTree* tree);

/* 返回GTree的高度 */
int GTree_Height(GTree* tree);

/* 返回树的结点数 */
int GTree_Count(GTree* tree);

/* 返回树的度数 */
int GTree_Degree(GTree* tree);

void GTree_Display(GTree* tree, GTree_Printf* pFunc, int gap, char div);

#endif
